Set the close-on-exec flag on the RPC socket in tool stack.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 15 Aug 2006 15:26:39 +0000 (16:26 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 15 Aug 2006 15:26:39 +0000 (16:26 +0100)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
tools/python/xen/util/xmlrpclib2.py
tools/python/xen/web/httpserver.py

index 5231881d22d3ffc3b7bd0aab45307ef50f6e4ac3..b353b1cf007744d4e6d04833d2d43d87b9c0cf36 100644 (file)
@@ -22,6 +22,7 @@ An enhanced XML-RPC client/server interface for Python.
 
 import string
 import types
+import fcntl
 
 from httplib import HTTPConnection, HTTP
 from xmlrpclib import Transport
@@ -136,6 +137,17 @@ class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer):
                  logRequests=1):
         SimpleXMLRPCServer.__init__(self, addr, requestHandler, logRequests)
 
+        flags = fcntl.fcntl(self.fileno(), fcntl.F_GETFD)
+        flags |= fcntl.FD_CLOEXEC
+        fcntl.fcntl(self.fileno(), fcntl.F_SETFD, flags)
+
+    def get_request(self):
+        (client, addr) = SimpleXMLRPCServer.get_request(self)
+        flags = fcntl.fcntl(client.fileno(), fcntl.F_GETFD)
+        flags |= fcntl.FD_CLOEXEC
+        fcntl.fcntl(client.fileno(), fcntl.F_SETFD, flags)
+        return (client, addr)
+                                                                                
     def _marshaled_dispatch(self, data, dispatch_method = None):
         params, method = xmlrpclib.loads(data)
         if False:
index 568a169d58ac55df10937c10010582f21bb48128..bcf5dbd6b1aa7e10fc4889806b129acae8b49892 100644 (file)
@@ -24,6 +24,7 @@ import types
 from urllib import quote, unquote
 import os
 import os.path
+import fcntl
 
 from xen.xend import sxp
 from xen.xend.Args import ArgError
@@ -294,6 +295,9 @@ class HttpServer:
 
     def bind(self):
         self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        flags = fcntl.fcntl(self.socket.fileno(), fcntl.F_GETFD)
+        flags |= fcntl.FD_CLOEXEC
+        fcntl.fcntl(self.socket.fileno(), fcntl.F_SETFD, flags)
         self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         self.socket.bind((self.interface, self.port))
 
@@ -338,3 +342,6 @@ class UnixHttpServer(HttpServer):
         
     def bind(self):
         self.socket = unix.bind(self.path)
+        flags = fcntl.fcntl(self.socket.fileno(), fcntl.F_GETFD)
+        flags |= fcntl.FD_CLOEXEC
+        fcntl.fcntl(self.socket.fileno(), fcntl.F_SETFD, flags)